package com.dims_hsrc.data.service.impl;

import com.dims_hsrc.common.utils.uuid.IdUtils;
import com.dims_hsrc.data.domain.DataDirectMapping;
import com.dims_hsrc.data.domain.DataDirectMappingResult;
import com.dims_hsrc.data.mapper.DataDirectMappingMapper;
import com.dims_hsrc.data.service.IDataDirectMappingService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;

/**
 * 直接映射Service业务层处理
 *
 * @author 赵浩然
 */
@Service
@Transactional
public class DataDirectMappingServiceImpl implements IDataDirectMappingService {
    @Resource
    private DataDirectMappingMapper mapper;

    /**
     * 查询直接映射
     *
     * @param id 直接映射主键
     * @return 直接映射
     */
    @Override
    public DataDirectMapping getOne(String id) {
        return mapper.getOne(id);
    }

    /**
     * 查询直接映射列表
     *
     * @param mapping 直接映射
     * @return 直接映射集合
     */
    @Override
    public List<DataDirectMapping> list(DataDirectMapping mapping) {
        return mapper.list(mapping);
    }

    /**
     * 新增直接映射
     *
     * @param mapping 直接映射
     * @return 结果
     */
    @Override
    public int add(DataDirectMapping mapping) {
        mapping.setId(IdUtils.simpleUUID());
        return mapper.add(mapping);
    }

    /**
     * 修改直接映射
     *
     * @param mapping 直接映射
     * @return 结果
     */
    @Override
    public int update(DataDirectMapping mapping) {
        return mapper.update(mapping);
    }

    /**
     * 批量删除直接映射
     *
     * @param ids 需要删除的直接映射主键集合
     * @return 结果
     */
    @Override
    public int remove(String[] ids) {
        return mapper.remove(ids);
    }

    /**
     * 删除直接映射信息
     *
     * @param id 直接映射主键
     * @return 结果
     */
    @Override
    public int del(String id) {
        return mapper.del(id);
    }

    /**
     * 根据结构ID获取映射列表
     *
     * @param sid 结构ID
     * @return 映射结果集合
     */
    @Override
    public List<DataDirectMappingResult> getBySid(String sid) {
        return mapper.getBySid(sid);
    }

    /**
     * 根据结构需求ID获取映射列表
     *
     * @param sdid 结构需求ID
     * @return 直接映射集合
     */
    @Override
    public List<DataDirectMapping> getBySdid(String sdid) {
        return mapper.getBySdid(sdid);
    }

    /**
     * 根据结构指标ID获取映射列表
     *
     * @param siid 结构指标ID
     * @return 直接映射集合
     */
    @Override
    public List<DataDirectMapping> getBySiid(String siid) {
        return mapper.getBySiid(siid);
    }

    /**
     * 检查文本类型需求是否已被映射
     *
     * @param sdid 结构需求ID
     * @return 是否已被映射
     */
    @Override
    public boolean checkDemandMapped(String sdid) {
        return mapper.checkDemandMapped(sdid) > 0;
    }

    /**
     * 检查文本类型技术指标是否已被映射
     *
     * @param siid 结构指标ID
     * @return 是否已被映射
     */
    @Override
    public boolean checkIndicatorMapped(String siid) {
        return mapper.checkIndicatorMapped(siid) > 0;
    }

    /**
     * 根据结构ID查询所有已映射的文本类型需求和技术指标
     *
     * @param sid 结构ID
     * @return 直接映射集合
     */
    @Override
    public List<DataDirectMapping> getTextTypeMappingsBySid(String sid) {
        return mapper.getTextTypeMappingsBySid(sid);
    }

    /**
     * 检查某个需求和技术指标的组合是否已经存在映射
     *
     * @param sid 结构ID
     * @param sdid 结构需求ID
     * @param siid 结构指标ID
     * @return 是否已存在映射
     */
    @Override
    public boolean checkMappingExists(String sid, String sdid, String siid) {
        return mapper.checkMappingExists(sid, sdid, siid) > 0;
    }
} 